type satisfaction = Sat | Unsat of (int * bool array) | NeverSat
val compute_sat_rec :
  'a array -> satisfaction -> (bool * int * 'a) array -> int -> satisfaction
val compute_sat :
  int array -> Mn.Factor.varvalue array -> Mn.Factor.feature -> satisfaction
val sat_array_to_list : 'a * bool array -> ('a * int) list
val cond_sat_set : int array -> (bool * int * int) array -> (int * int) list
val generate_sat_states :
  int array ->
  Mn.Factor.varvalue array -> Mn.Factor.feature -> (int * int) list
val string_of_sat : int * int -> string
val string_of_satl : (int * int) list -> string
val add_counts_to_gradient :
  int array ->
  int array array array ->
  float * int array -> float array -> float array -> float
val add_counts_to_gradient_l :
  int array ->
  int list array array ->
  float * int array -> float array -> float array -> float
val build_pll_cache :
  Mn.network ->
  ('a * Mn.Factor.varvalue array) array ->
  int array * Mn.Factor.feature array *
  ('a * Mn.Factor.varvalue array) array * int array array array array
val pll_val_and_grad_cached :
  int array * 'a * (float * int array) array * int array array array array ->
  float array -> float array -> float
val build_pll_minicache :
  Mn.network -> 'a -> int array * Mn.Factor.feature array * 'a * unit
val pll_val_and_grad :
  int array * Mn.Factor.feature array *
  (float * Mn.Factor.varvalue array) array * 'a ->
  float array -> float array -> float
val pll_cache_to_mn :
  int array * Mn.Factor.feature array * 'a * 'b -> float array -> Mn.network
val fa_pll :
  int array -> Mn.Factor.feature array -> Mn.Factor.varvalue array -> float
type mn_t
external create_mn_helper :
  int array -> (bool * int * int) array array -> float array -> mn_t
  = "ocaml_create_mn"
val create_mn : int array -> Mn.Factor.feature array -> mn_t
type data_t
external create_data : (float * int array) array -> data_t
  = "ocaml_create_data"
external pll_mn : mn_t -> int array -> float = "ocaml_c_pll_mn"
external pll_val_and_grad_ext :
  mn_t -> data_t -> float array -> float array -> float
  = "ocaml_c_pll_val_and_grad"
val build_pll_ccache :
  Mn.network ->
  (float * int array) array ->
  int array * Mn.Factor.feature array * (float * int array) array *
  (mn_t * data_t)
val pll_val_and_grad_c :
  'a * 'b * 'c * (mn_t * data_t) -> float array -> float array -> float
type cache_t
external create_cache_ext : mn_t -> data_t -> cache_t = "ocaml_create_cache"
val build_pll_ccache2 :
  Mn.network ->
  (float * int array) array ->
  int array * Mn.Factor.feature array * (float * int array) array *
  (mn_t * data_t * cache_t)
external pll_val_and_grad_cache_ext :
  mn_t -> data_t -> cache_t -> float array -> float array -> float
  = "ocaml_c_pll_val_and_grad_cached"
val pll_val_and_grad_ccache :
  'a * 'b * 'c * (mn_t * data_t * cache_t) ->
  float array -> float array -> float
